package com.zenithmind.chat.pojo.vo;

import lombok.Data;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 聊天消息VO
 * 
 * @author ZenithMind Team
 * @since 2025-01-09
 */
@Data
public class ChatMessageVO {

    /**
     * 消息ID
     */
    private String id;

    /**
     * 群组ID
     */
    private String groupId;

    /**
     * 发送者ID
     */
    private String senderId;

    /**
     * 发送者姓名
     */
    private String senderName;

    /**
     * 发送者头像
     */
    private String senderAvatar;

    /**
     * 消息类型（1-文本，2-图片，3-文件，4-语音，5-视频，6-系统消息，7-表情，8-链接）
     */
    private Integer messageType;

    /**
     * 消息类型文本
     */
    private String messageTypeText;

    /**
     * 消息内容
     */
    private String content;

    /**
     * 媒体文件URL
     */
    private String mediaUrl;

    /**
     * 媒体文件大小（字节）
     */
    private Long mediaSize;

    /**
     * 媒体文件大小文本
     */
    private String mediaSizeText;

    /**
     * 媒体文件时长（秒）
     */
    private Integer mediaDuration;

    /**
     * 媒体文件时长文本
     */
    private String mediaDurationText;

    /**
     * 缩略图URL
     */
    private String thumbnailUrl;

    /**
     * 回复的消息ID
     */
    private String replyToId;

    /**
     * 回复的消息内容
     */
    private String replyToContent;

    /**
     * 回复的消息发送者
     */
    private String replyToSender;

    /**
     * @提及的用户列表
     */
    private List<ChatUserVO> mentionUsers;

    /**
     * 是否@全体成员
     */
    private Boolean mentionAll;

    /**
     * 消息状态（1-正常，2-已撤回，3-已删除）
     */
    private Integer status;

    /**
     * 消息状态文本
     */
    private String statusText;

    /**
     * 撤回时间
     */
    private LocalDateTime recallTime;

    /**
     * 撤回原因
     */
    private String recallReason;

    /**
     * 已读用户数
     */
    private Integer readCount;

    /**
     * 点赞数
     */
    private Integer likeCount;

    /**
     * 是否置顶
     */
    private Boolean isPinned;

    /**
     * 置顶时间
     */
    private LocalDateTime pinTime;

    /**
     * 客户端消息ID
     */
    private String clientMsgId;

    /**
     * 发送时间
     */
    private LocalDateTime sendTime;

    /**
     * 发送时间文本（相对时间）
     */
    private String sendTimeText;

    /**
     * 当前用户是否已读
     */
    private Boolean isRead;

    /**
     * 当前用户是否点赞
     */
    private Boolean isLiked;

    /**
     * 是否可以撤回（发送后2分钟内）
     */
    private Boolean canRecall;

    /**
     * 是否为当前用户发送
     */
    private Boolean isSelf;

    /**
     * 扩展信息
     */
    private Object extraInfo;

    /**
     * 创建时间
     */
    private LocalDateTime createTime;
}
